package dto

import (
	"bloggo/bloggo"
	"time"
)

const (
	// PUBLIC 公开
	PUBLIC = 1
	// SECRET 私密
	SECRET = 2
	// DRAFT 草稿
	DRAFT = 3
)

type ArticleHomeDTO struct {
	Id             int       `json:"id,omitempty"`
	ArticleCover   string    `json:"articleCover,omitempty"`
	ArticleTitle   string    `json:"articleTitle,omitempty"`
	ArticleContent string    `json:"articleContent,omitempty"`
	CreateTime     time.Time `json:"createTime"`
	IsTop          int8      `json:"isTop,omitempty"`
	Type           int8      `json:"type,omitempty"`
	CategoryId     int       `json:"categoryId,omitempty"`
	CategoryName   string    `json:"categoryName,omitempty"`
	TagDTOList     []*TagDTO `json:"tagDTOList,omitempty"`
	Sortno         int       `json:"sortno,omitempty"`
}

type TagDTO struct {
	Id           int    `json:"id,omitempty"`
	TagName      string `json:"tagName,omitempty"`
	CreateTime   string `json:"createTime,omitempty"`
	ArticleCount int64  `json:"articleCount"`
}

type CategorieDTO struct {
	Id           int         `json:"id"`
	CategoryName string      `json:"categoryName"`
	ArticleCount int         `json:"articleCount"`
	CreateTime   bloggo.Time `json:"createTime"`
}

type UserInfoDTO struct {
	ArticleLikeSet []int  `json:"articleLikeSet"` //点赞文章集合
	Avatar         string `json:"avatar"`
	CommentLikeSet []int  `json:"commentLikeSet"` //点赞评论集合
	Email          string `json:"email"`
	Id             int    `json:"id"`
	Intro          string `json:"intro"` //用户简介
	IpAddress      string `json:"ipAddress"`
	IpSource       string `json:"ipSource"`
	LastLoginTime  string `json:"lastLoginTime"`
	LoginType      int    `json:"loginType"` //登录方式
	Nickname       string `json:"nickname"`
	UserInfoId     int    `json:"userInfoId"`
	Username       string `json:"username"`
	WebSite        string `json:"webSite"`
}

type ArchiveDTO struct {
	Id           int       `json:"id"`
	ArticleTitle string    `json:"articleTitle"`
	CreateTime   time.Time `json:"createTime"`
}
type AlbumDTO struct {
	Id         int    `json:"id"`
	AlbumName  string `json:"albumName"`
	AlbumDesc  string `json:"albumDesc"`
	AlbumCover string `json:"albumCover"`
}

type BlogInfoDTO struct {
	ArticleCount  int    `json:"articleCount"`
	CategoryCount int    `json:"categoryCount"`
	TagCount      int    `json:"tagCount"`
	ViewsCount    string `json:"viewsCount"`
	WebsiteConfig struct {
		WebsiteAvatar     string   `json:"websiteAvatar"`
		WebsiteName       string   `json:"websiteName"`
		WebsiteAuthor     string   `json:"websiteAuthor"`
		WebsiteIntro      string   `json:"websiteIntro"`
		WebsiteNotice     string   `json:"websiteNotice"`
		WebsiteCreateTime string   `json:"websiteCreateTime"`
		WebsiteRecordNo   string   `json:"websiteRecordNo"`
		SocialLoginList   []string `json:"socialLoginList"`
		SocialUrlList     []string `json:"socialUrlList"`
		Qq                string   `json:"qq"`
		Github            string   `json:"github"`
		Gitee             string   `json:"gitee"`
		TouristAvatar     string   `json:"touristAvatar"`
		IsCommentReview   int      `json:"isCommentReview"`
		IsMessageReview   int      `json:"isMessageReview"`
		IsEmailNotice     int      `json:"isEmailNotice"`
		IsReward          int      `json:"isReward"`
		WeiXinQRCode      string   `json:"weiXinQRCode"`
		AlipayQRCode      string   `json:"alipayQRCode"`
		IsChatRoom        int      `json:"isChatRoom"`
		WebsocketUrl      string   `json:"websocketUrl"`
		IsMusicPlayer     int      `json:"isMusicPlayer"`
	} `json:"websiteConfig"`
	PageList []struct {
		PageCover string `json:"pageCover"`
		Id        int    `json:"id"`
		PageName  string `json:"pageName"`
		PageLabel string `json:"pageLabel"`
	} `json:"pageList"`
}

type ArticleDetailInfo struct {
	Id             int         `json:"id"`
	ArticleCover   string      `json:"articleCover"`
	ArticleTitle   string      `json:"articleTitle"`
	ArticleContent string      `json:"articleContent"`
	LikeCount      interface{} `json:"likeCount"`
	ViewsCount     int         `json:"viewsCount"`
	Type           int         `json:"type"`
	OriginalUrl    string      `json:"originalUrl"`
	CreateTime     string      `json:"createTime"`
	UpdateTime     string      `json:"updateTime"`
	CategoryId     int         `json:"categoryId"`
	CategoryName   string      `json:"categoryName"`
	TagDTOList     []struct {
		Id      int    `json:"id"`
		TagName string `json:"tagName"`
	} `json:"tagDTOList"`
	LastArticle struct {
		Id           int    `json:"id"`
		ArticleCover string `json:"articleCover"`
		ArticleTitle string `json:"articleTitle"`
	} `json:"lastArticle"`
	NextArticle struct {
		Id           interface{} `json:"id"`
		ArticleCover interface{} `json:"articleCover"`
		ArticleTitle interface{} `json:"articleTitle"`
	} `json:"nextArticle"`
	RecommendArticleList []struct {
		Id           int    `json:"id"`
		ArticleCover string `json:"articleCover"`
		ArticleTitle string `json:"articleTitle"`
		CreateTime   string `json:"createTime"`
	} `json:"recommendArticleList"`
	NewestArticleList []struct {
		Id           int    `json:"id"`
		ArticleCover string `json:"articleCover"`
		ArticleTitle string `json:"articleTitle"`
		CreateTime   string `json:"createTime"`
	} `json:"newestArticleList"`
}
type Link struct {
	Id          int    `json:"id"`
	LinkName    string `json:"linkName"`
	LinkAvatar  string `json:"linkAvatar"`
	LinkAddress string `json:"linkAddress"`
	LinkIntro   string `json:"linkIntro"`
}

// Comment 评论列表
type Comment struct {
	Id             int        `json:"id"`
	UserId         int        `json:"userId"`
	Nickname       string     `json:"nickname"`
	Avatar         string     `json:"avatar"`
	WebSite        string     `json:"webSite"`
	CommentContent string     `json:"commentContent"`
	LikeCount      int        `json:"likeCount"`
	CreateTime     string     `json:"createTime"`
	ReplyCount     int        `json:"replyCount"`
	ReplyDTOList   []ReplyDTO `json:"replyDTOList"`
}

type AdminComments struct {
	Id             int         `json:"id"`
	Avatar         string      `json:"avatar"`
	Nickname       string      `json:"nickname"`
	ReplyNickname  interface{} `json:"replyNickname"`
	ArticleTitle   string      `json:"articleTitle"`
	CommentContent string      `json:"commentContent"`
	IsReview       int         `json:"isReview"`
	CreateTime     string      `json:"createTime"`
}

type ReplyDTO struct {
	Id             int    `json:"id"`
	ParentId       int    `json:"parentId"`
	UserId         int    `json:"userId"`
	Nickname       string `json:"nickname"`
	Avatar         string `json:"avatar"`
	WebSite        string `json:"webSite"`
	ReplyUserId    int    `json:"replyUserId"`
	ReplyNickname  string `json:"replyNickname"`
	ReplyWebSite   string `json:"replyWebSite"`
	CommentContent string `json:"commentContent"`
	LikeCount      int    `json:"likeCount"`
	CreateTime     string `json:"createTime"`
}

type PostComment struct {
	ArticleId      string `json:"articleId"`
	ReplyUserId    int    `json:"replyUserId"`
	ParentId       int    `json:"parentId"`
	CommentContent string `json:"commentContent"`
}
type PhotoDTO struct {
	PhotoAlbumCover string `json:"photoAlbumCover"`
	PhotoAlbumName  string `json:"photoAlbumName"`
	PhotoList       []struct {
		Id            int    `json:"id"`
		PhotoCompress string `json:"photoCompress"`
		PhotoSrc      string `json:"photoSrc"`
	} `json:"photoList"`
}

type LoginDTO struct {
	ArticleLikeSet []int              `json:"articleLikeSet"`
	Avatar         string             `json:"avatar"`
	CommentLikeSet []int              `json:"commentLikeSet"`
	Email          string             `json:"email"`
	Id             int                `json:"id"`
	Intro          string             `json:"intro"`
	IpAddress      string             `json:"ipAddress"`
	IpSource       string             `json:"ipSource"`
	LastLoginTime  string             `json:"lastLoginTime"`
	LoginType      int8               `json:"loginType"`
	Nickname       string             `json:"nickname"`
	UserInfoId     int                `json:"userInfoId"`
	Username       string             `json:"username"`
	WebSite        string             `json:"webSite"`
	Token          string             `json:"token"`
	Claims         bloggo.SessionUser `json:"claims"`
}

type BlogBackInfoDTO struct {
	ViewsCount      int `json:"viewsCount"`
	MessageCount    int `json:"messageCount"`
	UserCount       int `json:"userCount"`
	ArticleCount    int `json:"articleCount"`
	CategoryDTOList []struct {
		Id           int    `json:"id"`
		CategoryName string `json:"categoryName"`
		ArticleCount int    `json:"articleCount"`
	} `json:"categoryDTOList"`
	TagDTOList []struct {
		Id      int    `json:"id"`
		TagName string `json:"tagName"`
	} `json:"tagDTOList"`
	ArticleStatisticsList []struct {
		Date  string `json:"date"`
		Count int    `json:"count"`
	} `json:"articleStatisticsList"`
	UniqueViewDTOList []struct {
		Day        string `json:"day"`
		ViewsCount int    `json:"viewsCount"`
	} `json:"uniqueViewDTOList"`
	ArticleRankDTOList []struct {
		Id           string `json:"id"`
		ArticleTitle string `json:"articleTitle"`
		ViewsCount   int    `json:"viewsCount"`
	} `json:"articleRankDTOList"`
}

type PostArticle struct {
	Id             string   `json:"id"`
	ArticleTitle   string   `json:"articleTitle"`
	ArticleContent string   `json:"articleContent"`
	ArticleCover   string   `json:"articleCover"`
	CategoryName   string   `json:"categoryName"`
	TagNameList    []string `json:"tagNameList"`
	OriginalUrl    string   `json:"originalUrl"`
	IsTop          int8     `json:"isTop"`
	Type           int8     `json:"type"`
	Status         int8     `json:"status"`
}

type AdminArticleDTO struct {
	Id             int      `json:"id"`
	ArticleTitle   string   `json:"articleTitle"`
	ArticleContent string   `json:"articleContent"`
	ArticleCover   string   `json:"articleCover"`
	CategoryId     string   `json:"categoryId"`
	CategoryName   string   `json:"categoryName"`
	TagNameList    []string `json:"tagNameList"`
	Type           int      `json:"type"`
	OriginalUrl    string   `json:"originalUrl"`
	IsTop          int      `json:"isTop"`
	Status         int      `json:"status"`
}

type AdminArticleListDTO struct {
	Id           string `json:"id"`
	ArticleCover string `json:"articleCover"`
	ArticleTitle string `json:"articleTitle"`
	CreateTime   string `json:"createTime"`
	LikeCount    int    `json:"likeCount"`
	ViewsCount   int    `json:"viewsCount"`
	CategoryName string `json:"categoryName"`
	TagDTOList   []struct {
		Id      int    `json:"id"`
		TagName string `json:"tagName"`
	} `json:"tagDTOList"`
	Type     int `json:"type"`
	IsTop    int `json:"isTop"`
	IsDelete int `json:"isDelete"`
	Status   int `json:"status"`
	Sortno   int `json:"sortno"`
}

type ArticleDelDTO struct {
	IdList   []int `json:"idList"`
	IsDelete int   `json:"isDelete"`
}

type ReviewCommentDTO struct {
	IdList   []int `json:"idList"`
	IsReview int   `json:"isReview"`
}

type ReviewMessageDTO struct {
	IdList   []int `json:"idList"`
	IsReview int   `json:"isReview"`
}

type AdminUsers struct {
	Id         int    `json:"id"`
	UserInfoId int    `json:"userInfoId"`
	Avatar     string `json:"avatar"`
	Nickname   string `json:"nickname"`
	RoleList   []struct {
		Id       int    `json:"id"`
		RoleName string `json:"roleName"`
	} `json:"roleList"`
	LoginType     int       `json:"loginType"`
	IpAddress     string    `json:"ipAddress"`
	IpSource      string    `json:"ipSource"`
	CreateTime    time.Time `json:"createTime"`
	LastLoginTime time.Time `json:"lastLoginTime"`
	IsDisable     int       `json:"isDisable"`
}
